{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# SVM"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "# 首先 import 必要的模块\n",
    "import pandas as pd \n",
    "import numpy as np\n",
    "\n",
    "from sklearn.model_selection import GridSearchCV\n",
    "\n",
    "#SVM并不能直接输出各类的概率，所以在这个例子中我们用正确率作为模型预测性能的度量\n",
    "from sklearn.metrics import accuracy_score\n",
    "\n",
    "from matplotlib import pyplot\n",
    "import seaborn as sns\n",
    "%matplotlib inline"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 读取数据"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style>\n",
       "    .dataframe thead tr:only-child th {\n",
       "        text-align: right;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: left;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>bathrooms</th>\n",
       "      <th>bedrooms</th>\n",
       "      <th>price</th>\n",
       "      <th>dis2MHD</th>\n",
       "      <th>Year</th>\n",
       "      <th>Month</th>\n",
       "      <th>Day</th>\n",
       "      <th>Wday</th>\n",
       "      <th>Yday</th>\n",
       "      <th>top_10_manager</th>\n",
       "      <th>...</th>\n",
       "      <th>top_5_manager</th>\n",
       "      <th>top_50_manager</th>\n",
       "      <th>top_1_manager</th>\n",
       "      <th>top_2_manager</th>\n",
       "      <th>top_15_manager</th>\n",
       "      <th>top_20_manager</th>\n",
       "      <th>top_30_manager</th>\n",
       "      <th>photos_count</th>\n",
       "      <th>features_count</th>\n",
       "      <th>interest_level</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>1.5</td>\n",
       "      <td>3</td>\n",
       "      <td>3000</td>\n",
       "      <td>5725.808989</td>\n",
       "      <td>2016</td>\n",
       "      <td>6</td>\n",
       "      <td>24</td>\n",
       "      <td>4</td>\n",
       "      <td>176</td>\n",
       "      <td>1</td>\n",
       "      <td>...</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>5</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>1.0</td>\n",
       "      <td>2</td>\n",
       "      <td>5465</td>\n",
       "      <td>10406.936420</td>\n",
       "      <td>2016</td>\n",
       "      <td>6</td>\n",
       "      <td>12</td>\n",
       "      <td>6</td>\n",
       "      <td>164</td>\n",
       "      <td>1</td>\n",
       "      <td>...</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>11</td>\n",
       "      <td>5</td>\n",
       "      <td>2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>1.0</td>\n",
       "      <td>1</td>\n",
       "      <td>2850</td>\n",
       "      <td>3602.496322</td>\n",
       "      <td>2016</td>\n",
       "      <td>4</td>\n",
       "      <td>17</td>\n",
       "      <td>6</td>\n",
       "      <td>108</td>\n",
       "      <td>1</td>\n",
       "      <td>...</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>8</td>\n",
       "      <td>4</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>1.0</td>\n",
       "      <td>1</td>\n",
       "      <td>3275</td>\n",
       "      <td>6306.161401</td>\n",
       "      <td>2016</td>\n",
       "      <td>4</td>\n",
       "      <td>18</td>\n",
       "      <td>0</td>\n",
       "      <td>109</td>\n",
       "      <td>1</td>\n",
       "      <td>...</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>3</td>\n",
       "      <td>2</td>\n",
       "      <td>2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>1.0</td>\n",
       "      <td>4</td>\n",
       "      <td>3350</td>\n",
       "      <td>13983.395510</td>\n",
       "      <td>2016</td>\n",
       "      <td>4</td>\n",
       "      <td>28</td>\n",
       "      <td>3</td>\n",
       "      <td>119</td>\n",
       "      <td>0</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>3</td>\n",
       "      <td>1</td>\n",
       "      <td>2</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>5 rows × 21 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "   bathrooms  bedrooms  price       dis2MHD  Year  Month  Day  Wday  Yday  \\\n",
       "0        1.5         3   3000   5725.808989  2016      6   24     4   176   \n",
       "1        1.0         2   5465  10406.936420  2016      6   12     6   164   \n",
       "2        1.0         1   2850   3602.496322  2016      4   17     6   108   \n",
       "3        1.0         1   3275   6306.161401  2016      4   18     0   109   \n",
       "4        1.0         4   3350  13983.395510  2016      4   28     3   119   \n",
       "\n",
       "   top_10_manager       ...        top_5_manager  top_50_manager  \\\n",
       "0               1       ...                    1               1   \n",
       "1               1       ...                    1               1   \n",
       "2               1       ...                    1               1   \n",
       "3               1       ...                    1               1   \n",
       "4               0       ...                    0               1   \n",
       "\n",
       "   top_1_manager  top_2_manager  top_15_manager  top_20_manager  \\\n",
       "0              0              0               1               1   \n",
       "1              0              0               1               1   \n",
       "2              0              1               1               1   \n",
       "3              1              1               1               1   \n",
       "4              0              0               0               0   \n",
       "\n",
       "   top_30_manager  photos_count  features_count  interest_level  \n",
       "0               1             5               0               1  \n",
       "1               1            11               5               2  \n",
       "2               1             8               4               0  \n",
       "3               1             3               2               2  \n",
       "4               1             3               1               2  \n",
       "\n",
       "[5 rows x 21 columns]"
      ]
     },
     "execution_count": 2,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "train_data = pd.read_csv(\"RentListingInquries_FE_train.csv\")\n",
    "train_data.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style>\n",
       "    .dataframe thead tr:only-child th {\n",
       "        text-align: right;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: left;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>bathrooms</th>\n",
       "      <th>bedrooms</th>\n",
       "      <th>price</th>\n",
       "      <th>dis2MHD</th>\n",
       "      <th>Year</th>\n",
       "      <th>Month</th>\n",
       "      <th>Day</th>\n",
       "      <th>Wday</th>\n",
       "      <th>Yday</th>\n",
       "      <th>top_10_manager</th>\n",
       "      <th>...</th>\n",
       "      <th>top_5_manager</th>\n",
       "      <th>top_50_manager</th>\n",
       "      <th>top_1_manager</th>\n",
       "      <th>top_2_manager</th>\n",
       "      <th>top_15_manager</th>\n",
       "      <th>top_20_manager</th>\n",
       "      <th>top_30_manager</th>\n",
       "      <th>photos_count</th>\n",
       "      <th>features_count</th>\n",
       "      <th>interest_level</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>count</th>\n",
       "      <td>49278.000000</td>\n",
       "      <td>49278.00000</td>\n",
       "      <td>49278.000000</td>\n",
       "      <td>49278.000000</td>\n",
       "      <td>49278.0</td>\n",
       "      <td>49278.000000</td>\n",
       "      <td>49278.000000</td>\n",
       "      <td>49278.000000</td>\n",
       "      <td>49278.000000</td>\n",
       "      <td>49278.000000</td>\n",
       "      <td>...</td>\n",
       "      <td>49278.000000</td>\n",
       "      <td>49278.000000</td>\n",
       "      <td>49278.000000</td>\n",
       "      <td>49278.000000</td>\n",
       "      <td>49278.000000</td>\n",
       "      <td>49278.000000</td>\n",
       "      <td>49278.000000</td>\n",
       "      <td>49278.000000</td>\n",
       "      <td>49278.000000</td>\n",
       "      <td>49278.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>mean</th>\n",
       "      <td>1.210875</td>\n",
       "      <td>1.54083</td>\n",
       "      <td>3657.135882</td>\n",
       "      <td>6612.808665</td>\n",
       "      <td>2016.0</td>\n",
       "      <td>5.014976</td>\n",
       "      <td>15.209850</td>\n",
       "      <td>2.922318</td>\n",
       "      <td>137.006575</td>\n",
       "      <td>0.606214</td>\n",
       "      <td>...</td>\n",
       "      <td>0.460043</td>\n",
       "      <td>0.947603</td>\n",
       "      <td>0.221235</td>\n",
       "      <td>0.302041</td>\n",
       "      <td>0.705508</td>\n",
       "      <td>0.771176</td>\n",
       "      <td>0.854600</td>\n",
       "      <td>5.603413</td>\n",
       "      <td>5.428893</td>\n",
       "      <td>1.616583</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>std</th>\n",
       "      <td>0.495222</td>\n",
       "      <td>1.11295</td>\n",
       "      <td>2258.835488</td>\n",
       "      <td>3947.320372</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.824431</td>\n",
       "      <td>8.280243</td>\n",
       "      <td>1.784835</td>\n",
       "      <td>25.868199</td>\n",
       "      <td>0.488593</td>\n",
       "      <td>...</td>\n",
       "      <td>0.498406</td>\n",
       "      <td>0.222828</td>\n",
       "      <td>0.415082</td>\n",
       "      <td>0.459148</td>\n",
       "      <td>0.455819</td>\n",
       "      <td>0.420080</td>\n",
       "      <td>0.352507</td>\n",
       "      <td>3.626500</td>\n",
       "      <td>3.922919</td>\n",
       "      <td>0.626215</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>min</th>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.00000</td>\n",
       "      <td>43.000000</td>\n",
       "      <td>4.447797</td>\n",
       "      <td>2016.0</td>\n",
       "      <td>4.000000</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>92.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>...</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>25%</th>\n",
       "      <td>1.000000</td>\n",
       "      <td>1.00000</td>\n",
       "      <td>2500.000000</td>\n",
       "      <td>3707.371517</td>\n",
       "      <td>2016.0</td>\n",
       "      <td>4.000000</td>\n",
       "      <td>8.000000</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>114.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>...</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>4.000000</td>\n",
       "      <td>2.000000</td>\n",
       "      <td>1.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>50%</th>\n",
       "      <td>1.000000</td>\n",
       "      <td>1.00000</td>\n",
       "      <td>3150.000000</td>\n",
       "      <td>6153.217534</td>\n",
       "      <td>2016.0</td>\n",
       "      <td>5.000000</td>\n",
       "      <td>15.000000</td>\n",
       "      <td>3.000000</td>\n",
       "      <td>137.000000</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>...</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>5.000000</td>\n",
       "      <td>5.000000</td>\n",
       "      <td>2.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>75%</th>\n",
       "      <td>1.000000</td>\n",
       "      <td>2.00000</td>\n",
       "      <td>4100.000000</td>\n",
       "      <td>8978.502986</td>\n",
       "      <td>2016.0</td>\n",
       "      <td>6.000000</td>\n",
       "      <td>22.000000</td>\n",
       "      <td>4.000000</td>\n",
       "      <td>160.000000</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>...</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>7.000000</td>\n",
       "      <td>8.000000</td>\n",
       "      <td>2.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>max</th>\n",
       "      <td>5.500000</td>\n",
       "      <td>6.00000</td>\n",
       "      <td>58020.000000</td>\n",
       "      <td>44065.820784</td>\n",
       "      <td>2016.0</td>\n",
       "      <td>6.000000</td>\n",
       "      <td>31.000000</td>\n",
       "      <td>6.000000</td>\n",
       "      <td>181.000000</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>...</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>68.000000</td>\n",
       "      <td>39.000000</td>\n",
       "      <td>2.000000</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>8 rows × 21 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "          bathrooms     bedrooms         price       dis2MHD     Year  \\\n",
       "count  49278.000000  49278.00000  49278.000000  49278.000000  49278.0   \n",
       "mean       1.210875      1.54083   3657.135882   6612.808665   2016.0   \n",
       "std        0.495222      1.11295   2258.835488   3947.320372      0.0   \n",
       "min        0.000000      0.00000     43.000000      4.447797   2016.0   \n",
       "25%        1.000000      1.00000   2500.000000   3707.371517   2016.0   \n",
       "50%        1.000000      1.00000   3150.000000   6153.217534   2016.0   \n",
       "75%        1.000000      2.00000   4100.000000   8978.502986   2016.0   \n",
       "max        5.500000      6.00000  58020.000000  44065.820784   2016.0   \n",
       "\n",
       "              Month           Day          Wday          Yday  top_10_manager  \\\n",
       "count  49278.000000  49278.000000  49278.000000  49278.000000    49278.000000   \n",
       "mean       5.014976     15.209850      2.922318    137.006575        0.606214   \n",
       "std        0.824431      8.280243      1.784835     25.868199        0.488593   \n",
       "min        4.000000      1.000000      0.000000     92.000000        0.000000   \n",
       "25%        4.000000      8.000000      1.000000    114.000000        0.000000   \n",
       "50%        5.000000     15.000000      3.000000    137.000000        1.000000   \n",
       "75%        6.000000     22.000000      4.000000    160.000000        1.000000   \n",
       "max        6.000000     31.000000      6.000000    181.000000        1.000000   \n",
       "\n",
       "            ...        top_5_manager  top_50_manager  top_1_manager  \\\n",
       "count       ...         49278.000000    49278.000000   49278.000000   \n",
       "mean        ...             0.460043        0.947603       0.221235   \n",
       "std         ...             0.498406        0.222828       0.415082   \n",
       "min         ...             0.000000        0.000000       0.000000   \n",
       "25%         ...             0.000000        1.000000       0.000000   \n",
       "50%         ...             0.000000        1.000000       0.000000   \n",
       "75%         ...             1.000000        1.000000       0.000000   \n",
       "max         ...             1.000000        1.000000       1.000000   \n",
       "\n",
       "       top_2_manager  top_15_manager  top_20_manager  top_30_manager  \\\n",
       "count   49278.000000    49278.000000    49278.000000    49278.000000   \n",
       "mean        0.302041        0.705508        0.771176        0.854600   \n",
       "std         0.459148        0.455819        0.420080        0.352507   \n",
       "min         0.000000        0.000000        0.000000        0.000000   \n",
       "25%         0.000000        0.000000        1.000000        1.000000   \n",
       "50%         0.000000        1.000000        1.000000        1.000000   \n",
       "75%         1.000000        1.000000        1.000000        1.000000   \n",
       "max         1.000000        1.000000        1.000000        1.000000   \n",
       "\n",
       "       photos_count  features_count  interest_level  \n",
       "count  49278.000000    49278.000000    49278.000000  \n",
       "mean       5.603413        5.428893        1.616583  \n",
       "std        3.626500        3.922919        0.626215  \n",
       "min        0.000000        0.000000        0.000000  \n",
       "25%        4.000000        2.000000        1.000000  \n",
       "50%        5.000000        5.000000        2.000000  \n",
       "75%        7.000000        8.000000        2.000000  \n",
       "max       68.000000       39.000000        2.000000  \n",
       "\n",
       "[8 rows x 21 columns]"
      ]
     },
     "execution_count": 3,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "## 各属性的统计特性\n",
    "train_data.describe()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x5c48e10>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# Target 分布，看看各类样本分布是否均衡\n",
    "sns.countplot(train_data.interest_level);\n",
    "pyplot.xlabel('interest_level');\n",
    "pyplot.ylabel('Number of occurrences');"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "各类样本不均衡。交叉验证对分类任务缺省的是采用StratifiedKFold，在每折采样时根据各类样本按比例采样"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 设置X，Y"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "y_train = train_data['interest_level'] \n",
    "train_data = train_data.drop( \"interest_level\", axis=1)\n",
    "X_train = np.array(train_data)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 数据预处理"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "# 数据标准化\n",
    "from sklearn.preprocessing import StandardScaler\n",
    "\n",
    "# 初始化特征的标准化器\n",
    "ss_X = StandardScaler()\n",
    "\n",
    "# 分别对训练和测试数据的特征进行标准化处理\n",
    "X_train = ss_X.fit_transform(X_train)\n",
    "#X_test = ss_X.transform(X_test)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 模型训练"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "C:\\Anaconda2\\lib\\site-packages\\sklearn\\model_selection\\_split.py:2026: FutureWarning: From version 0.21, test_size will always complement train_size unless both are specified.\n",
      "  FutureWarning)\n"
     ]
    }
   ],
   "source": [
    "# 训练样本接近5w，交叉验证太慢，用train_test_split估计模型性能\n",
    "from sklearn.model_selection import train_test_split\n",
    "X_train_part, X_val, y_train_part, y_val = train_test_split(X_train, y_train, train_size = 0.8,random_state = 0)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### RBF核SVM正则参数调优"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "from sklearn.svm import SVC   "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "def fit_grid_point_RBF(C, gamma, X_train, y_train, X_val, y_val):\n",
    "    \n",
    "    # 在训练集是那个利用SVC训练\n",
    "    SVC1 =  SVC( C = C, kernel='rbf', gamma = gamma)\n",
    "    SVC1 = SVC1.fit(X_train, y_train)\n",
    "    \n",
    "    # 在校验集上返回accuracy\n",
    "    accuracy = SVC1.score(X_val, y_val)\n",
    "    \n",
    "    print(\"accuracy: {}\".format(accuracy))\n",
    "    return accuracy"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "accuracy: 0.696124188312\n",
      "accuracy: 0.696124188312\n",
      "accuracy: 0.696124188312\n",
      "accuracy: 0.696124188312\n",
      "accuracy: 0.696124188312\n",
      "accuracy: 0.696124188312\n",
      "accuracy: 0.69632711039\n",
      "accuracy: 0.696124188312\n",
      "accuracy: 0.696124188312\n",
      "accuracy: 0.696124188312\n",
      "accuracy: 0.696124188312\n",
      "accuracy: 0.704646915584\n",
      "accuracy: 0.834314123377\n",
      "accuracy: 0.985186688312\n",
      "accuracy: 0.996043019481\n",
      "accuracy: 0.696124188312\n",
      "accuracy: 0.753956980519\n",
      "accuracy: 0.980418019481\n",
      "accuracy: 0.996753246753\n",
      "accuracy: 0.997970779221\n",
      "accuracy: 0.700791396104\n",
      "accuracy: 0.825588474026\n",
      "accuracy: 0.996347402597\n",
      "accuracy: 0.99807224026\n",
      "accuracy: 0.998376623377\n"
     ]
    }
   ],
   "source": [
    "#需要调优的参数\n",
    "C_s = np.logspace(-2, 2, 5)# logspace(a,b,N)把10的a次方到10的b次方区间分成N份 \n",
    "gamma_s = np.logspace(-2, 2, 5)  \n",
    "\n",
    "accuracy_s = []\n",
    "for i, oneC in enumerate(C_s):\n",
    "    for j, gamma in enumerate(gamma_s):\n",
    "        tmp = fit_grid_point_RBF(oneC, gamma, X_train, y_train, X_val, y_val)\n",
    "        accuracy_s.append(tmp)\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAYsAAAEKCAYAAADjDHn2AAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMS4wLCBo\ndHRwOi8vbWF0cGxvdGxpYi5vcmcvpW3flQAAIABJREFUeJzs3Xd8VMXawPHf7KYXklBCSyCEHlqA\n0BUBRekooqhXRV+92PCKCCo2FBHpyhX7FVG4guUiomKhitKLgJDQSyqk97Zl3j92s25IQjYhm5My\n34/5ZE9/Epd9MmfOPCOklCiKoijK1ei0DkBRFEWp+VSyUBRFUcqlkoWiKIpSLpUsFEVRlHKpZKEo\niqKUSyULRVEUpVwqWSiKoijlUslCURRFKZdKFoqiKEq5XLQOoKo0btxYhoSEaB2GoihKrXLw4MFk\nKWWT8varM8kiJCSEAwcOaB2GoihKrSKEuOjIfuo2lKIoilIulSwURVGUcqlkoSiKopSrzvRZlMZg\nMBAbG0t+fr7WoSh1iIeHB0FBQbi6umodiqJUG6clCyHECmAMkCil7FrKdgEsA0YBucADUspD1m2T\ngZesu86VUn5WmRhiY2Px9fUlJCQEy+UU5dpIKUlJSSE2NpY2bdpoHY6iVBtn3oZaCYy4yvaRQHvr\n1xTgfQAhRENgNtAP6AvMFkIEVCaA/Px8GjVqpBKFUmWEEDRq1Ei1VpV6x2nJQkq5A0i9yi7jgc+l\nxR7AXwjRHLgF2CSlTJVSpgGbuHrSuSqVKJSqpt5TSn2kZZ9FSyDGbjnWuq6s9SUIIaZgaZXQqlUr\n50SpKEqlSLPEbP2SJutrk/XLbLZsty3LYstSSrD8B1Jav2NdV7QB23rb9NB2x9h9K3acbVf7KaVL\n2W67ru0alhfFzml3jmLHSZBmM1h/TsxmpJRI+2W771La7StliW1F67liWZrNIMEnwJ2e9w26xv9j\nV6dlsijtzzN5lfUlV0r5EfARQERERI2eTLxfv34UFBSQmppKXl4eLVta8t/69eupyMjzdevWERYW\nRqdOnSp0/euuu47ly5cTHh5eoeOKLF68mBYtWnDPPfdU6vjqcMcdd7BgwQJCQ0NLbPv555954YUX\nMBgMuLm5sWTJEoYMGVJiv5SUFO68806io6MJDQ3lq6++ws/Pr0riK/ahaZaYTWbLB+NVPjQty+Zi\ny8WOKbZs/vsDuaz97K4vrde3/0A3FR1ji8FcxrVksWv9nQzMtmVZo/9F1i0NDBfqdLKIBYLtloOA\neOv6IVes315tUTnJ3r17AVi5ciUHDhxg+fLllTrPunXr0Ol0FU4W18JgMLBq1SoOHTpUbdesjEcf\nfZRFixbx/vvvl9gWGBjIjz/+SPPmzTly5AhjxowhJiamxH5vvPEGI0eOZMaMGcydO5eFCxfyxhtv\nVDomKSXrFh3i0vmMMv7kqR46vUCnEwi9sL3+e1lnWdYLhE6gt3637eeqQ+h0fy9fud3+3Drr+fQC\nIc3I/FzIy0XmZCNzs5HZWcjsTGRWJjIzA3NmBmRlIqQRIc3WLxNCmu1/iQAIAeh0ltuAOmH5rtcj\nAKHTgV4ghM6yTadD6IRlf511vV6HQIBeh05YvtvOUbSvXnfFOazn0est17D+HtDpEXoBwnp+nd5y\nvqJz6KzXsx4n9DrAuk1v3abTF9tXp9db49WBXo9Ob7meUZhJLUwjqSCFxPxkEguSScxP5FJeIpcL\nkinESOtmHbmPfzj1PaRlstgATBVCrMXSmZ0hpUwQQvwCzLPr1L4ZmKVVkNXhp59+Ys6cORQUFNC+\nfXtWrFiBt7c3M2fO5Mcff8TFxYWRI0cyZswYNm7cyM6dO3n11Vcr3Copsnr1ahYsWICUknHjxjFv\n3jwAPvzwQ5YsWUKLFi1o164dPj4+vP3222zatIk+ffqg1+sB2LNnD1OmTMHHx4dBgwaxadMmDh8+\nzNmzZ3nggQfIzs5Gp9Px3nvv0a9fPzZv3swbb7xBo0aNOHLkCJMmTaJDhw688847FBQUsGHDBkJC\nQrj33nvx8/MjMjKS6OhoPv30Uz755BP27t3LoEGD+OSTTwCYMmUKhw4dIi8vj0mTJvHKK68AMGTI\nEB5++GFMJpMt1iK9evWyve7WrRvZ2dkYDIYSj79+99137NmzB4DJkyczYsSIa0oWCWcyuHQugw59\nm+Lf1KvUD1mdXldifYn99JYPr+LLV24veq0rngx0VdvHYi4sxJSUhCExEWNSkuXrkvV70brERExp\naSUP1ulwadQIl8BAXJo0waVDIC5Nuvy9bP2u9/EG64dm0YdnXe4ryizMJCYrhpisGGKzYm2vo9Oj\nScxNxO6GGN5u3gQ3CibYtzsDfYMI9g2mrV9bp8fozEdn12BpITQWQsRiecLJFUBK+QGwEctjs2ew\nPDr7oHVbqhDidWC/9VRzpJRX6yh3yGvfHycyPvNaT1NMWIsGzB7b5ZrOkZiYyPz589myZQteXl68\n8cYbLFu2jIceeoiNGzdy/PhxhBCkp6fj7+/PqFGjmDhxIrfeemulrhcbG8tLL73EgQMH8PPz46ab\nbuKHH36gR48ezJ8/n0OHDuHt7c2QIUPo27cvADt37qR37962czz44IN89tln9O3blxkzZtjWN2/e\nnE2bNuHh4cGJEyeYPHmyrUV15MgRoqKi8PPzIyQkhMcff5z9+/ezZMkSli9fzuLFiwHIyMhg27Zt\n/O9//2Ps2LHs3r2bTp060atXL44dO0bXrl2ZP38+DRs2xGg0MnToUCZOnEhYWBh6vZ6QkBCOHTtG\njx49yvwdfPXVV/Tr16/UcRIpKSk0aWKpqdayZUsSEhIq9XsuErUzHlcPPUP+0QlXd335B2jIXFCA\nMSm52Ad+ad9N6eklD9brcWncGJcmTXBt2RLP8HBcApsUSwCugYHoGzZE6Gv278EZzNJMUm6SLQkU\nSwrZMWQUZBTbv5FHI4J9g+nbrC/BvsEENwi2fPcNJsA9QJPE6bRkIaW8u5ztEniijG0rgBXOiKum\n2bVrF5GRkQwcOBCAwsJCrrvuOho2bIhOp+Of//wno0ePZsyYMVVyvb179zJs2DAaN24MwD333MOO\nHTvIz89n2LBhBARYGnQTJ04kOjoagISEBHr27AlAcnIyhYWFtkRyzz33sHnzZgAKCgqYOnUqR44c\nwcXFhbNnz9qu269fP5o2bQpAaGgot9xyC2D5K3/37t22/caOHWtb36JFC8LCwgAICwvjwoULdO3a\nlTVr1vDJJ59gNBqJj48nMjLStl9gYCDx8fFlJou//vqLl156iU2bNjn0+7qWf5QFeUbOHEykY/9m\nmiYKc37+3y2AxESMiUkYk+y+JyVhSEzCnJFR8mAXF8sHfpMmuLZqhWdEb9sHf7GWQEBAvUwC9gwm\nA3HZcaUmhNjsWApMBbZ99UJPc+/mBPsGc0vrW2yJIMjaUvBy9dLwJyldnR7Bbe9aWwDOIqVkxIgR\nrFq1qsS2AwcOsGnTJtauXcv777/Pr7/+WuZ57D/AJ0yYYLs1U9r1KrIewNPT0zau4Gr7LVmyhODg\nYFavXo3BYMDHx8e2zd3d3fZap9PZlnU6HUajscR+9vvY73f69GmWLVvGvn378Pf359577y025iE/\nPx9PT0+++eYb5s6dC1j6icLDw4mOjmbChAmsXr26zAF1jRo1IikpiSZNmhAXF0ezZs3K/HnLc3r/\nZYwGM50Htaj0Oa7GnJdX6l/+tttDiZYEYc4spUXt6opLE0tLwC0kBK8+fUrcCnIJDETv72+5DaQA\nkGPIKZYM7JNCQk4CZru+Fk8XT4J8g2jdoDXXtbzOlhCCfYNp5tMMV13tqgBQb5JFTTVw4ECeeuop\nzp07R2hoKDk5OcTHx9OsWTPy8/MZM2YM/fr1s/3l7OvrS1ZWVonzuLm5cfjw4XKv179/f2bOnElK\nSgp+fn6sXbuWGTNm0K1bN5577jnS09Px9vZm3bp1REREANC5c2fOnDkDQJMmTXB1deXAgQNERESw\ndu1a27kzMjJo164dQgg+++yzqyaWysrMzMTX15cGDRqQkJDAL7/8wogRfw/DOX36NF26dKFJkyZM\nnDjRtj4tLY3Ro0ezePFi+vfvX+b5x40bx2effcaMGTP47LPPGD9+fKVjjdoZT6OW3gS29q3Qcebc\n3DI/+O2TgrmU94FwdbV92LuHhuLdv3+JBOAS2AS9n59KAqWQUpKSn1JmQkjNL35HPMA9gGDfYHo0\n6cGY0DHFEkJjz8Z1qp9FJQuNNW3alE8++YRJkyZRWFgIwLx58/D09GTChAkUFBRgNptZunQpAHff\nfTePPPIIS5YsqVQHd1BQEHPmzGHIkCFIKRk7diyjR48GYObMmfTt25eWLVvSpUsX2yOjo0aN4qGH\nHrKdY8WKFTz44IP4+voyePBg235Tp05l4sSJrFmzhptuuqlYy6Cq9OrVi7CwMLp27UpoaCiDBv39\nuGB8fDx+fn62Pgd7y5Yt4/z588yePZvZs2cDsGXLFho1asSDDz7IU089RXh4OC+88AJ33nknH374\nIW3atOHLL7+sVJzJsdkkXsziujvb2z4wTNk5drd/7FoEV7QOzDk5Jc4n3N1tt4Pc27fHe+BAuwTQ\nxHZrSOfnV6c+oJzBaDaSkJNgSwDRmdG2voPYrFjyjHm2fXVCRzOvZgT7BjM0eGixZBDsG4yPm89V\nrlS3CGf89aeFiIgIeeXkR1FRUXTu3FmjiGqf7OxsfHx8MBgMjB8/nscee8zWhzBu3DjefvttQkND\nbfuB5VHT1NRUlixZomXoACxatIjAwEAmT57s9GuV9976/ctTHPs9jgfeHETKC8+Qs3MX5tzcEvsJ\nD4+/P/Sv+OC3bxHoGjRQSaACcg25xGbHlni6KCYrhoTsBIzy71ufbjo3W1+Bfb9BK99WtPRpiau+\ndt0uqighxEEpZUR5+6mWhWLz8ssvs337dvLz8xkxYkSxTvUFCxYQHx9PaGgoGzZsYOHChRiNRkJC\nQli5cqV2Qdtp1KgR9957r9ZhYDSYOLnvEqHhTeBsJFmbNuM7fDie4T1K3BLS+fioJFAJUkrSCtJK\nf7ooK4bkvORi+zdwa0CwbzBdGnVhRMiIYkkh0CsQnVC35MqjWhaKUglXe2+d3n+ZXz85zrh/haNf\ntZisX36h3Y4dlrEDisNMZhOXcy+X2X+Qbcgutn+gV6CtRWB/qyjINwg/96oZhV8XqZaFomgkcmc8\nvg09aN5Cz5mffsJv3DiVKBwkpeSdP99h08VNxGXHYTAbbNtcdC4E+QQR5BtEz8CexRJCS5+WeLh4\naBh53aeShaJUoczkPGJPpNF3bBsyv/8emZ+P/6Q7tQ6r1vjixBd8/NfH9G/en2GthhVLCE29mqLX\n1e+xHFpSyUJRqlDUrgQQ0LF/M5If+BKPrl3x7FIzx/jUNPsv7WfR/kUMCR7CsqHLVD9CDaP+byhK\nFTGbJSd2J9AqrCEuF6MoOH1GtSocdCnnEjN+m0GwbzDzrpunEkUNpP6PVJN+/foRHh5Oq1ataNKk\nCeHh4YSHh3PhwoUKnWfdunWcOHGiwte/7rrrHBq0V5bFixfzxRdfVPr46nDHHXdw7ty5UrclJiYy\nZMgQvL29mTZtWpnnSElJ4cYbb6R9+/bccsstZJRWAqMMMVGpZKcV0HlgC9K//BKdtzd+o0ZV+Oeo\nbwpMBTy97WkKTAUsG7YMX7eKDWJUqodKFtVk7969HD58mDlz5jBp0iQOHz7M4cOHKzyorrLJ4loU\nlSifNGlStV63oopKlJemqEjjggULrnqOohLlp0+f5vrrr2fhwoUOXz/qj3g8fFxp1dqFzJ9+psG4\nsei8Vcf21UgpmbtnLsdSjvHGdW8Q6ldyLhKlZlDJogb46aefGDBgAL169WLSpEnkWEfwzpw5k7Cw\nMLp3785zzz3H77//zsaNG3n66acr1Sopsnr1arp160bXrl154YUXbOs//PBDOnToYCv1XfQXeGkl\nyrt3787AgQOZOXOmbUKls2fPcv3119OzZ0969+5tqzi7efNmW3XY9u3b89JLL/H555/Tp08funfv\nbvs57r33Xp544gmGDh1K27Zt2bFjB5MnT6ZTp07FRpBPmTKFiIgIunTpwpw5c2zrhwwZws8//4zJ\nZCrxMxeVU/fwuPoTM999951tUN/kyZNZv369Q7/TvKxCzh9NpmP/ZmT/+D2ysJCAGp5ca4KvTn7F\n+jPreaT7I9zY6katw1Guov50cP/0PFz6q2rP2awbjJx/TadQJcqrv0T51VS2RPnJvZcwmySdBzYn\n7eGv8OjRHY9qnKCqNvoz8U/m75vP9S2v5/Hwx7UORymHallozL5EeXh4OP/973+5cOFCsRLl3377\nLd5VdDvDvkS5q6urrUR50fqAgADc3NyKFeFLSEiwfYCWVqK8SEFBAQ899BBdu3blrrvuIjIy0rat\nqES5h4dHiRLl9i2k0kqU63Q6W4lygDVr1tCrVy969epFVFRUsesUlSivKo6MrpZSErkzgaZtGuAZ\nF0XhuXME3KlaFVeTmJvI9O3TaeHTgvmD56sO7Vqg/rQsrrEF4CyqRHn1lSh3RGVKlF8+n0laQg5D\n7+tE2pdvofP1pcGokQ5drz4qNBUyfft0cgw5fDT8Ixq4NdA6JMUBKp1rbODAgfz222+2p3hycnI4\nffo0WVlZZGZmMmbMGN566y3+/PNPoPwS5YcPHy4zUYClRPm2bdtISUnBaDSydu1abrjhBvr168e2\nbdtIT0/HYDCwbt062zFllSgHSpQob968ebWXKLdXVKJ84sSJtt+Ho4kC/i5RDjhcojxyZzwu7npC\n2rqR9csv+I0bh87Ts2I/WD0yf998jiQdYe6gubQPaK91OIqD6k/LooZSJcorprIlyot+9tzcXAwG\nA9988w1btmyhY8eO11SivDDfyOkDibTvHUjexu+RBoMaW3EV35z6hq9Pfc1DXR/i5pCbtQ5HqQgp\nZZ346t27t7xSZGRkiXVK2bKysqSUUhYWFsqRI0fKDRs22LaNHTtWnj17tth+Uko5d+5cOX369OoN\ntAwLFy6UK1eurJZrFb23jv8RJ5c/skXGn0mTZ24ZIc/fdXe1XL82Opx4WPb8vKec8usUaTQZtQ5H\nsQIOSAc+Y9VtKMXm5ZdfpmfPnnTv3p2OHTuWWqIcYMOGDYSHh9O1a1d2797NrFmztAq5GC1KlEft\njCegmRe+iScovHBBtSrKkJyXzPRt0wn0CmTh4IWqxlMtpEqUK0olREVF0dSvFWvm7GXg7e0I/Olt\nsnfuov1v29GVM5ajvjGYDDz868NEpUaxauQqOjbsqHVIih1HS5SrloWiVFLkrnh0OkG7Dm5kbtqM\n3/hxKlGUYtGBRRxKPMRrA19TiaIWU8lCUSpBSsnJPZdo06MxhZt+AINBjdguxfoz61lzYg2TwyYz\nso16nLg2c2qyEEKMEEKcFEKcEUI8X8r21kKILUKIo0KI7UKIILttJiHEYevXBmfGqSgVZTSYyc82\n0GlgM9K++hqviAjc27bVOqwa5XjycV7f/Tr9mvVjWu+yizcqtYPTkoUQQg+8C4wEwoC7hRBhV+y2\nGPhcStkdmAO8abctT0oZbv0a56w4FaUyDPkmfALcaZRxCkN0NP6qVVFMSl4K07ZPo7FnYxbdsAgX\nnXpKv7ZzZsuiL3BGSnlOSlkIrAWuHOEUBmyxvt5WyvY6Q5Uod74rS5Tv37+frl270q5dO55++ulS\nj5FS8vjjj9OuXTt69Ojh0O/IZDRjMpjpNKA5GV9/jd7fH99b1JiBIgazgRm/zSAtP423hr5FgEeA\n1iEpVcCZyaIlEGO3HGtdZ+8IcLv19W2ArxCikXXZQwhxQAixRwhRuap5NYgqUe58V5Yof/TRR/n0\n0085ffo0x48fZ9OmTSWO+f7774mJieHMmTO8++67PPHEE+VeJz/bMi90+07uZG3Zgt9tt6Fzc6u6\nH6SWW3pgKQcuH2D2gNmENbryZoJSWzkzWZRWge3K53RnADcIIf4EbgDigKJCQa2sj3PdA7wthChx\nQ1gIMcWaUA4kJSVVYejVS5Uot/wcVVmiPCYmhvz8fPr06YMQgvvuu6/UcuPfffcd999/P2BpfV26\ndImrvZeklOTlGNC76jBv/QGMRvzvvKMy/xvqpO/Pfs/qqNXc2/lexrYdq3U4ShVy5o3EWCDYbjkI\nKFYOVEoZD0wAEEL4ALdLKTPstiGlPCeE2A70BM5ecfxHwEdgGWdxtWAW7FvAidSq/Yu8U8NOPNf3\nuWs6hypR7pwS5Xl5eQQH//32CwoKIi4ursTvIy4urtT9yioZYsg3YTaacXXXk/7113j164d7mzaV\n+n9R10SlRDFn9xwimkYwPWK61uEoVcyZLYv9QHshRBshhBtwF1DsqSYhRGMhbLWJZwErrOsDhBDu\nRfsAg4BI6iBVotw5JcpLG2xaWrlxR/crkpdtQOgEemnAEBdHgBqxDUBafhrTtk3Dz92PxTcsxlXn\nqnVIShVzWstCSmkUQkwFfgH0wAop5XEhxBwstUg2AEOAN4UQEtgBFN0w7gx8KIQwY0lo86WU15Qs\nrrUF4CxSlSh3SonyoKAgYmL+7jKLjY2lRYsWJWIu2q9///5X3Q/AbDJTkGfA08cNc3Qurg0b4nvT\nTWX+PuoLo9nIzB0zSc5L5rORn9HIs1H5Bym1jlPHWUgpN0opO0gp20op37Cue8WaKJBSfiOlbG/d\n52EpZYF1/S4pZTcpZQ/r90+cGaeWVInyinG0RHlwcDDu7u7s378fKSWrVq0qtdz4uHHj+PzzzwH4\n448/aNq0aZm3oPJzjCDBw0Mg8/Pxn3AbQnVs8+9D/2Zvwl5e6v8SXRt31TocxUnUw88aUyXKK6Yi\nJcrff/99HnjgAfLz8xkzZgzDhw8H4N1338Xd3Z2HH36YsWPH8tNPP9G2bVu8vb1tc1lcSUpJfrYB\nFzc9ZGcA4H+H6tj++fzPfHr8UyZ1nMRt7W/TOhzFiVQhQcUmOzsbHx8fDAYD48eP57HHHrP1IYwb\nN463336b0NBQ234Ab7zxBqmpqSxZskTL0AFYtGgRgYGBTJ48ucrPbSgwkXYpB5+GHujiz3M6KYlu\n111X5depTU6mnuS+n+6jU8NOfHLzJ7jqVT9FbaQKCSoVpkqUly0/uxAhBG7mfKTBgM7LyynXqS0y\nCjKYtm0avq6+LB2yVCWKekC1LBSlHGazJCU2G3cvFzxyEjHn5XHebKZzWP0ccGYym3hi6xPsTdjL\nyhEr6dGkh9YhKddAtSwUpYoU5BqQUuLuITBlZaH3D4CrPF5b1717+F12xu3khX4vqERRj6hkoSjl\nyM82oHfRocvJBEDfsP7WOtp0cRMf//Uxt7e/nTs6qA7++kQlC0W5CqPBhKHAhIePK6a0NHQ+PvW2\nDtSZtDO8+MeLdG/cnRf6vVD+AUqdopKFolxFUdFAN1mANBpwadhQ44i0kVmYybTt0/By8WLpkKW4\n6etnwqzPVLKoJqpEufNdWaL8+eefJygoCH9//6seN3fuXNq1a0enTp3YvHmzbb2UkvwcA26eLpgz\n0hAuLujsRqXXF2ZpZtbvs4jLimPpkKU09W6qdUiKBlSyqCaqRLnzXVmifPz48ezZs+eqxxw9epR1\n69YRGRnJjz/+yGOPPYbZbAagMM+I2STx8NBhzspCHxCA0NW/fzLvH3mfHbE7eK7vc/Rq2kvrcBSN\n1L93fg2kSpRbfo6qLFEOMGDAAJo1a3bV38V3333H3XffjZubG23btqVVq1YcPHgQsBQN1OkF+jzL\niG19QP3r2N4WvY0PjnzAre1uZVLHmv3HguJc9abcx6V58yiIqtq/yN07d6LZC9fW0adKlDunRHmP\nHo490hkXF8eQIUNsy0Ulynv17E1hnhGvBm6YLqeh8/Wtdx3b5zLOMeuPWXRp1IWX+r901Wq8St2n\nWhYaUyXKnVOi3FFllSjPz7F2bFOINBpxqWetiuzCbKZtm4a73p23h76Nu77q63wptUu9aVlcawvA\nWVSJcueUKHdUaaXMmzdvTn62AVd3PTIjCeHiis7X1+Fz1nZmaebFP14kOjOaj2/+mGbeV7+Vp9QP\nqmWhMVWivGIcLVHuqHHjxrFmzRoKCws5e/YsFy9epHvXcExGMx6eOszZ2ZaO7Xp0C+bjox+zNWYr\nMyJm0KdZH63DUWoIlSw0Zl+ivEePHgwcOJBTp06RkZHB6NGj6dGjB8OGDStWonzevHmV7uC2L1Ee\nHh5O//79GT16NK1atbKVKL/55ptLlCj/7bffbOcoKlE+cOBAdDpdsRLl//nPf+jfvz8XL150eony\nf/7zn1ctUT59+nRCQkLIzMwkKCiIuXPnAvDtt9/aOsZ79OjBrbfeSufOnRk1ahTvvfcehbkmy2x4\nefVvxPaO2B28e/hdxoSO4R+d/6F1OEoNogoJKjaqRLllNrzkuBw8vV1wTbqIztMTt9atS+xXF99b\nFzMvcvcPdxPkG8RnIz/D08Xx23lK7aUKCSoVpkqUQ0GuEaTETVg6tvX1ZMR2riGXadumodfpeWvo\nWypRKCWoloWi2ElNsIxx8S5IQhYU4N6hQ6n9FXXpvSWl5JnfnmFL9BY+uOkDBrQYoHVISjVSLQtF\nqSBDoQljoQkPD1GvOrZXHFvBpoubeLrX0ypRKGVSyUJRrPKzDSAELvlZgKgXI7Z3xu1k2aFljAgZ\nweQuVT8drVJ3qGShKIA0W4oGunvqMaenoW/gi861bk8VGpMVw7M7nqVdQDteG/havWhFKZWnkoWi\nAAV5RqRZ4i4MSJOxzrcqijq0AZYNWYaXa/2eU1wpn0oW1USVKHc++xLlWVlZjBo1io4dO9KlSxde\nfPHFMo+bO3cuYV07MejGCLb+tAHh6lanS5FLKXl116ucTjvNwsELCW4QrHVISm0gpXTaFzACOAmc\nAZ4vZXtrYAtwFNgOBNltmwyctn5NLu9avXv3lleKjIwssU5rn376qXziiScqffw//vEP+e2331b4\nuEGDBsk///yzUtcsLCyU3bt3l0ajsVLHV5fNmzfLRx99VEopZVZWlty+fbuUUsr8/Hw5YMAA+euv\nv5Y45siRIzI8vKeMOZUkj+y8GEo8AAAgAElEQVQ/Ktu2aiXzL10q91o18b3lqJXHVsquK7vKj49+\nrHUoSg0AHJAOfJ47rWUhhNAD7wIjgTDgbiFE2BW7LQY+l1J2B+YAb1qPbQjMBvoBfYHZQog6e19A\nlSi3/BxVWaLcx8eHG264AbDUm+rZsyexsbElfhffffcdt982ETc3Nzq2aEJw8+YcsZtAqa7Zm7CX\npQeXMrz1cB7q+lD5ByiKlTMLCfYFzkgpzwEIIdYC44FIu33CgKetr7cB662vbwE2SSlTrcduwtJK\nWVPZYH7/6hTJMdmVPbxUjYN9uP7ODtd0DlWi3PklytPS0ti4cSPPPvtsqb+PiO4DcPNwQaamERQU\nRPzly5X63dZ08dnxzPhtBm0atOH1Qa+rDm2lQpzZZ9ESiLFbjrWus3cEuN36+jbAVwjRyMFj6wRV\noty5JcoNBgOTJk3imWeeoXUpZTtMRjNmsxk3nQFpMiHc3Orkh2i+MZ9p26ZhMptYNmwZ3q5V835S\n6g9ntixK+xd35XDxGcByIcQDwA4gDjA6eCxCiCnAFIBWrVpdNZhrbQE4i1Qlyp1WolxKaUteU6dO\nLTXmpk2ak3ApHn1WKtLNjbjLl2nRokWZP2NtJKXktd2vcSL1BMtvXE7rBiWTpqKUx5kti1jA/jGL\nIKDYrDRSyngp5QQpZU/gReu6DEeOte77kZQyQkoZUfSXb22jSpRXTEVKlM+aNYv8/HzbLa4rmUxm\nbrrhFtZ//w35GelcTE/n4sWLxW651QVfnPiCH879wOPhjzM4aLDW4Si1lDNbFvuB9kKINlhaDHcB\n99jvIIRoDKRKKc3ALGCFddMvwDy7Tu2brdvrHPsS5YWFhQDMmzcPT09PJkyYQEFBAWazuViJ8kce\neYQlS5awfv16QkJCKnQ9+xLlUkrGjh3L6NGjAWwlylu2bFmiRLl9B3NRiXJfX18GDx5crET5xIkT\nWbNmDTfddJPTS5SHhoaWWaL8woULLFiwgM6dO9OrVy8AnnrqKR588EG+/fZb/vrrL2Y89Rxdwrox\n7pab6TluHK5eXrz33nvodHXnifL9l/azaP8ihgYPZUr3KVqHo9RmjjwyVdkvYBRwCjgLvGhdNwcY\nZ309EcujsaeA/wDudsf+H5ZHbs8AD5Z3rdry6GxNlpWVJaW0PCo7cuRIuWHDBtu2sWPHyrNnzxbb\nT0op586dK6dPn169gZZh4cKFcuXKlQ7tazabZXJslkyNz5Z5kZGyIDq6QteqDe+thOwEOXjtYDlm\n3RiZVZBV/gFKvYSDj846dVpVKeVGYOMV616xe/0N8E0Zx67g75aGUg1efvlltm/fTn5+PiNGjCi1\nRHloaCgbNmxg4cKFGI1GQkJCWLlypXZB26lIiXJDgck6G54ZaTLVuRHbBaYCnt72NAWmApYNW4aP\nW90dZKhUD1WiXKmXMpPzKMg14mtMBqMB9/btK/QUVE1+b0kpeWXXK6w/s55lQ5cxrNUwrUNSajBV\notyqriRDpeqYzZKCXCPuHgKZm4NLw4YVShQ1/T311cmvWH9mPY90f0QlCqXK1Olk4eHhQUpKSo3/\nx61Ur4IcA1JKXA05IAR6f3+Hj5VSkpKSgoeHhxMjrLxDlw8xf998rm95PY+HP651OEod4tQ+C60F\nBQURGxtLUlKS1qEoNUhuRgFSglteKsLDA5fTpyt0vIeHB0FBQU6KrvIu51xm+vbptPBpwfzB89GJ\nOv23oFLN6nSycHV1pU2bNlqHodQgKXHZrF22j14d8vD+aAatV32OVw3te6iIQlMh03+bTq4xl//c\n/B8auDXQOiSljqnTyUJRrhS1MwGdXtBw31e4tG2LZ0S5/Xq1wpv73uRo0lGWDllKu4B2Woej1EGq\nnarUGyaDmZN7L9E61B3z4X0E3HlHnagD9c2pb/jm1Dc83O1hhrcernU4Sh2lWhZKvXH+aDL5OQZa\npBxCuLvjN3681iFdsyNJR5i3dx6DWgxianjp9a8UpSqoloVSb0TujMcnwA2PX1bTYMSICj0FVRMl\n5yUzfdt0Ar0CWTB4AXqdXuuQlDrMoWQhhPifEGK0EOrxCqV2ykzJIyYqlRD/dGRONv6TJmkd0jUx\nmAw8s/0ZsgxZLBu6DD93P61DUuo4Rz/838dSBPC0EGK+EKKTE2NSlCp3YvclAJoc/B/u7dvj2TNc\n44iuzcL9CzmUeIjXBr5Gx4YdtQ5HqQccShZSys1Syn8AvYALwCYhxC4hxINCCFdnBqgo18pslkTt\niqdlsBvi6B78J02q1R3b357+lrUn1/JAlwcY2Wak1uEo9YTDt5WsM9g9ADwM/Aksw5I8NjklMkWp\nIrEnUslOLaBl+mGEhwd+48ZqHVKlHU8+ztw9c+nXvB9P9XpK63CUesShp6GEEOuATsAqYKyUMsG6\n6UshxIGyj1QU7UXtTMDDywWfLZ/TYNQo9A1q54C1lLwUpm2fRmPPxiwavAgXnXqYUak+jr7blksp\nt5a2wZFqhYqilbzsQs4dTqJ98xzIySJg0p1ah1QpBrOBGb/NIC0/jVUjVxHgUbdKqis1n6O3oToL\nIWzPGQohAoQQqkqZUuOd2nsZs0nS5Mh63Dt1wqN7d61DqpSlB5Zy4PIBZg+YTedGtb88iVL7OJos\n/imlTC9akFKmAf90TkiKUjWklETujKdxoAtuf+0kYNKdtbJj+/uz37M6ajX3dr6XsW1rb3+LUrs5\nmix0wu5fmRBCD7g5JyRFqRqXL2SSGp9DUO4xhJcXDcbWvg/aqJQoXtv9GhFNI5geMV3rcJR6zNE+\ni1+Ar4QQHwASeBT42WlRKUoViNqZgIurDr/tq/AbPQq9T+2aWjQtP41p26bh7+7P4hsW46pTT6kr\n2nE0WTwHPAI8BgjgV+A/zgpKUa5VYb6R0/svE9wwG312Ov531q4R20azkZk7ZpKcl8xnIz+jkWcj\nrUNS6jmHkoWU0oxlFPf7zg1HUarG2UOJGApMBB7/EY+wMDy7ddU6pAr596F/szdhL68Pep2ujWtX\n7Erd5GhtqPZCiG+EEJFCiHNFX84OTlEqK2pnAn7+OryOba91daB+Pv8znx7/lLs63sWt7W7VOhxF\nARzv4P4US6vCCAwFPscyQE9Rapy0SzkknM0gKP8Eei8vGowerXVIDjuZepJXdr1Cz8CePNvnWa3D\nURQbR5OFp5RyCyCklBellK8Cw5wXlqJUXtTOBHQ6CPhjNQ3GjkXv4611SA7JKMhg2rZp+Lr6snTI\nUlz1qkNbqTkcTRb51vLkp4UQU4UQtwGB5R0khBghhDgphDgjhHi+lO2thBDbhBB/CiGOCiFGWdeH\nCCHyhBCHrV8fVOinUuotk8nMiT0JtPDPwy07pdaM2DaZTTy34zku5V5i6dClNPZsrHVIilKMo09D\nTQO8gH8Br2O5FTX5agdYx2K8CwwHYoH9QogNUspIu91eAr6SUr4vhAgDNgIh1m1npZS1u460Uu0u\nHk0hL8tAYPLPeHTrhkdYmNYhOWT54eXsjN/J7AGz6dGkh9bhKEoJ5bYsrB/6d0ops6WUsVLKB6WU\nt0sp95RzaF/gjJTynJSyEFgLXDmPpQSKqrr5AfEVjF9RioncFY+Xl6DB8a21plWx6eIm/vPXf5jY\nYSITO0zUOhxFKVW5yUJKaQJ624/gdlBLIMZuOda6zt6rwL1CiFgsrYon7ba1sd6e+k0IcX1pFxBC\nTBFCHBBCHEhKSqpgeEpdk51WQPSxFIKMZ3Dx9qLBqFFah1SuM2lnePGPF+nepDuz+s7SOhxFKZOj\nt6H+BL4TQnwN5BStlFKuu8oxpSUXecXy3cBKKeUSIcQAYJUQoiuQALSSUqYIIXoD64UQXaSUmcVO\nJuVHwEcAERERV55bqWdO7E5ASmi8ew1+48ai8/LSOqSryizMZNr2aXi7evPWkLdw06sKOkrN5Wiy\naAikUPwJKAlcLVnEAsF2y0GUvM30EDACQEq5WwjhATSWUiYCBdb1B4UQZ4EOgJo7QymVtM6GF9gg\nH4+shBo/tsIszcz6fRZxWXF8cssnBHqV+7yIomjK0RHcD1bi3PuB9kKINkAccBeWebztRQM3AiuF\nEJ0BDyBJCNEESJVSmoQQoUB7QA0CVMoUdyqNzOR8QpI249mjBx4da/a81O8feZ8dsTt4sd+L9Gra\nS+twFKVcjs6U9yklbyEhpfy/so6RUhqFEFOxFCHUAyuklMeFEHOAA1LKDcAzwMdCiKet539ASimF\nEIOBOUIII2ACHpVSplb0h1Pqj8idCbi5QUDUZvznvqZ1OFe1NXorHxz5gFvb3cqkjjW7BaQoRRy9\nDfWD3WsP4DYceHJJSrkRS8e1/bpX7F5HAoNKOe5/wP8cjE2p5/JzDJz7M4lWXMDVx5MGI0doHVKZ\nzmWc44U/XqBLoy681P+lWjm/hlI/OXobqtgHtxBiDbDZKREpSgWd2ncZk9FMk8Nf4zd+PDpPT61D\nKlV2YTZPbX0Kd707bw99G3e9u9YhKYrDHB3BfaX2QKuqDERRKitqVzwBXgX4pF+osWMrzNLMi3+8\nSExWDItvWEwz72Zah6QoFeJon0UWxfssLmGZ40JRNJUUnUVyTDZhyb/h2bs37u3aaR1SqT4++jFb\nY7byfN/n6dOsj9bhKEqFOXobytfZgShKZUT+EY9eD41O/ErAvFe1DqdUO2J38O7hdxkTOoZ7Ol35\nQKCi1A6OzmdxmxDCz27ZXwihCu0rmjIWmji1/zLNicXD2w3fW27ROqQSzqaf5bkdz9GpYSdeGfCK\n6tBWai1H+yxmSykzihaklOnAbOeEpCiOOftnEoV5RpocXo/frbeic69ZHcZp+WlM3TIVd707y4Yu\nw9OlZna8K4ojHE0Wpe3n6GO3iuIUUTvj8XE34J8ShX8N69guNBUybds0EnMT+fewf9Pcp7nWISnK\nNXE0WRwQQiwVQrQVQoQKId4CDjozMEW5mvTEXOJOpdM8fifeffrgHhqqdUg2Ukpe2/0ahxIP8cZ1\nb9C9SXetQ1KUa+ZosngSKAS+BL4C8oAnnBWUopQnalcCQkDgyV9rXB2oFcdWsOHsBh7v8Tgj2tTc\nAYKKUhGOPg2VA5SY6U5RtGA2mTmxO4FALuHlrcP35uFah2Sz5eIW3j70NiPbjOTRHo9qHY5SH5z4\nEXJToNf9Tr2Mo09DbRJC+NstBwghfnFeWIpStovHU8nNKCTw+Pf43XYbOreaUdo7MiWSWX/Monvj\n7swZOEc9+aQ4V3o0fHEXrL0HDq0Cs9mpl3O0k7qx9QkoAKSUaUIIVVNZ0UTUzng8XIw0SjpKwJ1v\nah0OAIm5iTy55Un83f1ZNmwZHi4eWoek1FUmA+xeDr8ttCwPfx36Pwa6yhbkcIyjycIshGglpYwG\nEEKEUEoVWkVxtpyMAi78lUzr5P349OuLW0iI1iGRZ8zjya1Pkm3I5vORn9PYs7HWISl11cVd8MN0\nSIqCTmNgxHzwDy7/uCrgaLJ4EfhDCPGbdXkwMMU5ISlK2U7uuYQ0Q7PTvxIwT/tutKKaT1EpUbwz\n7B06NqzZ82gotVROCmx6BQ6vBr9WcPda6DiyWkNwtIP7ZyFEBJYEcRj4DssTUYpSbaSURO1KoCHJ\n+HqZ8L3xRq1DYvmfy9l0cRMzI2ZyQ/ANWoej1DVmsyVBbHoFCrJg0DS44Vlw8672UBwtJPgw8BSW\nqVEPA/2B3RSfZlVRnCrhTAbpl3PpfPJn/CfchtC4Y/v7s9/z8V8fc3v727kv7D5NY1HqoMvHLbec\nYvZAqwEw5i0I7KxZOI72iDwF9AEuSimHAj2BJKdFpSiliNwZj6vORODlg/jfcYemsRy6fIjZu2bT\nr1k/Xuz/onrySak6hTnw68vw4WBIPgXj34UHNmqaKMDxPot8KWW+EAIhhLuU8oQQQt2cVapNQZ6R\nswcTaZZ6mAb9I3Brpd10KjFZMUzbNo0WPi1YMmQJrjpXzWJR6pgTG+GnZyEjBnreB8PngFdDraMC\nHE8WsdZxFuuBTUKINByYVlVRqsrp/ZcxGsw0O7sZ/7nPaBZHVmEWT255EpM0sXzYcvzc/co/SFHK\nkx4NPz0HJzdCYBj83y/Qqr/WURXjaAf3bdaXrwohtgF+wM9Oi0pRrhC1Mx5f0vH3yMV32FBNYjCa\njczcMZOLmRf5cPiHhPiFaBKHUoeYDLD7XfhtgWV5+Bzo/zjoa15rtcKVY6WUv5W/l6JUneTYbBIv\nZtH+zGYCJtyOcNXmH9Ki/YvYGbeTVwe8St/mfTWJQalDLu6GH6dDYiR0HA0jF1TbmInKUGXGlRov\namc8OmGm2eX9+N/xoiYxrD2xli9OfMH9Yfdze4fbNYlBqSNyUmDzK/DnavALhrvWQKdRWkdVLpUs\nlBrNaDBxcu8lAtMj8e/fE7egltUew674XczfN58bgm5geu/p1X59pY4wm+HIF5YnnQoyYdBTcMNz\nmoyZqAynFhMRQowQQpwUQpwRQpQYbiuEaCWE2CaE+FMIcVQIMcpu2yzrcSeFEDVvvkylWpw/nExB\nrpFmF7YScFf1lyI/l36OGdtn0Na/LQsGL0Cv01d7DEodcDkSVo6C756AJh3hkd8t/RO1JFGAE1sW\nQgg98C4wHIgF9gshNkgpI+12ewn4Skr5vhAiDNgIhFhf3wV0AVoAm4UQHaSUJmfFq9RMkTvj8ZTZ\nNHFLx+eG6h0hnZafxhNbnsBN78Y7w97B27X2/MNWaojCHEvn9e53wd0Xxi2H8H84veifMzjzNlRf\n4IyU8hyAEGItMB6wTxYSaGB97cffj+OOB9ZKKQuA80KIM9bz7XZivEoNk5mcR+yJNNpc3E7A7bcj\nXKrvrqn9tKgrRqyghU+Laru2UkcUGzNxL9w0B7wbaR1VpTnzX19LIMZuORbod8U+rwK/CiGeBLyB\nm+yO3XPFsdV/s1rRVNSuBEDS/PJe/O+YWW3XlVIyZ/ccDiUeYuHghfRo0qParq3UAekx1jETP0KT\nzvDgz9B6gNZRXTNnJovS6h9cWdb8bmCllHKJEGIAsEoI0dXBYxFCTMFa/baVhiN6lapnNkuidsXT\nKOsMjft1x7V582q79qfHP+W7s9/xeI/HGdmmeit7KrWYyQB73oft1jlWbnoNBjxRI8dMVIYzk0Us\nYP/QcBAlR30/BIwAkFLuFkJ4AI0dPBYp5UfARwARERFqfo06JCYqlZz0QtpE/4b/nH9W23W3XNzC\n2wffZmSImhZVqYDoPfDD09YxE6OsYybq1h+wzuxl2Q+0F0K0EUK4Yemw3nDFPtHAjQBCiM6AB5YC\nhRuAu4QQ7kKINkB7YJ8TY1VqmKg/4nGT+TRzScRn8ODquWZKFLP+mEW3xt2YM0hNi6o4IDcVvpsK\nK26B/Ey46wu4e02dSxTgxJaFlNIohJgK/ALogRVSyuNCiDnAASnlBuAZ4GMhxNNYbjM9IKWUwHEh\nxFdYOsONwBPqSaj6Iy+rkPNHkmgZu5OGE29D6J3/uGpibiJTt07Fz91PTYuqlE9KOPxfy5iJ/AwY\n+C/LmAl3H60jcxqnPl4ipdyI5XFY+3Wv2L2OBAaVcewbwBvOjE+pmU7uvYTZDC0S9+I/8b9Ov55t\nWtRCNS2q4oDEKMs8E9G7ILg/jFkKTbtoHZXTqRHcSo0ipSTy9zj8cqJp2rcTrk2bOvV69tOi/nvY\nv9W0qErZCnNhx0LY9Y51zMQ7EH5vrRwzURkqWSg1yuXzmaRdzqNTzA4C5jzg9OsVTYs6I2IGQ4KH\nOP16Si118mfYOBMyoi0JYnjtHjNRGSpZKDVK5M549NJAS30C3oNKvUNZZeynRb0/7H6nXkuppdJj\n4Ofn4cQP0KSTZca6EOe+L2sqlSyUGqMw38jpfZcIvLSfxneMd2rH9p+JfzJ712z6NuvLi/3UtKjK\nFWxjJuaDNMNNr0L/J8BF23nftaSShVJjnDmYiNEgaZG4F78JnzjtOrFZsbZpUZcOWYprHRk0pVSR\n6L3WMRPHocMIGLkQAlprHZXmVLJQaozI3+Pwzk+kZe82uAYGOuUa2YXZPLn1SYxmo5oWVSkuNxU2\nz4ZDn0ODljDpv9BpNKhWJ6CShVJDpMbncPlCFu1i/yDg1budco2iaVEvZFzgg+EfqGlRFQsp4cga\n+PUlyEuHgU/CDc/X6TETlaGShVIjRO6KR0gTQS6xeA90TtG1xQcW80fcH8weMJt+za+saanUS4kn\nLFObXtwJQX1hzFvQrKvWUdVIKlkomjMZzZzcGUfj5KM0nTAa4YTn1r888SX/jfov94fdz8QOE6v8\n/EotYz9mws0Hxv4bet5Xb8ZMVIZKFormLhxNJj/PTMfEvfhPeK/Kz78rfhdv7ntTTYuqWJz6BTbO\ngPRoy0REw+eAtxq1Xx6VLBTNHf89FvfCdFr3aolL46r9R3suwzItaqh/qJoWtb7LiLXMM3HiB2jc\nER74EUKu0zqqWkMlC0VTWan5xESlERK/i4az76zSc6flpzF1y1Rc9a4sH7ZcTYtaX5kMsPcD2Pam\nZczEjbNhwNR6PWaiMlSyUDR1YncCIAjWR+PVr+o6nQ0mA09vf5rLOZfVtKj1Wcw+y5iJy8eg/S0w\naiEEhGgdVa2kkoWiGWmWRP4WTUBqFC0n3FJlHdtSSubsmcPBywdZcP0CNS1qfZSbCptfhUOfWcdM\nrIZOY9SYiWugkoWimdiTaWRnmuiStA+/296qsvN+evxT1p9Zz2M9HmNU6KgqO69SC0gJR9bCry9a\nxkwMmApDZqkxE1VAJQtFM5E7YnEx5hIaHohLw4ZVcs4t0ZZpUUeEjOCxHo9VyTmVWiLppGWeiYt/\nQFAf65iJblpHVWeoZKFoIj/bwLnDSbS4tJdGU+6oknNGpUQx6/dZdG3cldcHva6KA9YXhbmwY5F1\nzIQ3jF0GPe9XYyaqmEoWiiZO7ruEWQpa66Px6tPnms9nPy3qv4f9W02LWl/Yj5nocY9lzIRPE62j\nqpNUslCqnZSSyK0X8M28SPBtQ6+5BZBnzONfW/9FVmEWq0auUtOi1gcZcfDzcxD1vRozUU1UslCq\nXVJ0FqnJBjom7cP/1jev6VxF06JGpkSqaVHrA5MR9n0I2+aB2Qg3vgIDnlRjJqqBShZKtTu+PRqd\nqZB24QHo/f2v6VzvHn5XTYtaX8Tst46Z+Ava32yZZ6JhG62jqjdUslCqlaHQxOn9lwlMOkTgo7df\n07l+OPcDHx39SE2LWtflpsKW1+DgZ+DbHO5cBZ3HqjET1UwlC6VanT2UiMEoaKW7iGevXpU+z+HE\nw7yy8xX6NOujpkWtq2xjJl6CvDQY8AQMeR7cfbWOrF5SyUKpVsd+PYtn7mVCx19X6Q/4uOw4ntr2\nFC18WvDWkLfUtKh1UdJJ+PEZuPA7tIyA+76F5t21jqpec2qyEEKMAJYBeuA/Usr5V2x/CxhqXfQC\nAqWU/tZtJuAv67ZoKeU4Z8aqOF/65VwuxxfSNmk//rfOrtQ5sguzmbplKgazQU2LWhelXYR9H8He\nD8HNyzKwrtcDasxEDeC0ZCGE0APvAsOBWGC/EGKDlDKyaB8p5dN2+z8J9LQ7RZ6UMtxZ8SnVL3L7\nRYQ00aGbL3q/in/I20+L+v7w99W0qHWFlHBuO+z7GE79BAjoPkmNmahhnNmy6AuckVKeAxBCrAXG\nA5Fl7H83ULk/N5Uaz2QyE7UzjkYpx2j26K2VOseSA0v4I+4PXhnwCv2b96/iCJVqV5Bl6ZPY9xEk\nnwKvRnDd0xDxf+AXpHV0yhWcmSxaAjF2y7FAqTWohRCtgTbAVrvVHkKIA4ARmC+lXO+sQBXnu/hX\nCvmFOsLERTzDK95g/OrkV6yOWs19YfdxR4eqKQ+iaCT5tKUVcfgLKMyCFj3h1g+gy23gqkbe11TO\nTBal9V7KMva9C/hGSmmyW9dKShkvhAgFtgoh/pJSni12ASGmAFMAWrVqVRUxK05y7OeTuBWk0358\nnwp3bO+O3828vfMYHDSYZ3o/46QIFacym+D0r5ZWxNmtoHOFrhOg7xQIitA6OsUBzkwWsUCw3XIQ\nEF/GvncBT9ivkFLGW7+fE0Jsx9KfcfaKfT4CPgKIiIgoKxEpGstJLyDmQgGtkw8SMP75Ch17LuMc\nz2x/hlD/UBYOXqimRa1tclPhz9Ww/z+QftEyTmLoS9B7MvgEah2dUgHOTBb7gfZCiDZAHJaEcM+V\nOwkhOgIBwG67dQFArpSyQAjRGBgELHRirIoTRf52ERB06OKJ3tfxZ+TT89PVtKi11aVjlrIcR78G\nYx60HgTDX7NMQKQeda6VnJYspJRGIcRU4Bcsj86ukFIeF0LMAQ5IKTdYd70bWCultG8ZdAY+FEKY\nAR2WPouyOsaVGkxKSeT2C/innyP4cceffjaYDEzbPo3LOZf55JZP1LSotYHJACd+gL0fQfQucPGE\n7ndC33+qeSXqAKeOs5BSbgQ2XrHulSuWXy3luF2AenfVAXGn0sjOc6G7uIBHt0ccOkZKyet7Xufg\n5YPMv34+4YHqCeoaLTvRUorjwArIigf/1nDzXAj/B3hVzaRWivbUCG7FqY79GIWLMZdOY8Id7the\neXwl3575lkd7PMro0NFOjlCptNgDlg7r49+CqRDaDrMMoms/HFTfUp2jkoXiNAW5Bs6fyqV5ymEa\njp/m0DFbo7fy1sG3GBEygsd7PO7kCJUKMxbAsXWWJBF/CNx8ofeDlltNjdtrHZ3iRCpZKE5z8vdo\nzOjp0NENvY9PufufSD3B878/r6ZFrYky4uDAJ5bbTbnJ0LgDjFoMPe5Shf3qCZUsFKc5tukMPlmX\nCHliVLn7JuUmMXWLmha1RpESLu601Gk68SNIM3QcZWlFhA5RJcLrGZUsFKdIis4kLduVMM7j1W3y\nVffNN+bzr63/IrMwU02LWhMU5sDRryyjrBOPg4e/pTx4n4choLXW0SkaUclCcYq/vvsLndlA2Kgu\nV92vaFrU4ynHWTZ0mbBICqMAAA/jSURBVJoWVUup52D/J/DnKsjPgKbdYNw70HWipQKsUq+pZKFU\nOWOhiTOR2QSmHaPJrY9edd/3Dr/Hrxd/5ZnezzC01dCr7qs4gdlsKb+x7yNLOQ6dHjqPs5ThaNVf\n3WpSbFSyUKrcmV3RGKQr7drp0XmXPer6h3M/8OHRD5nQfgKTu1z9VpVSxfIzLIX89n0MqWfBOxBu\neNbyZFOD5lpHp9RAKlkoVe7YT1F45GXT4albytynaFrUiKYRvNTvJfXkU3VJPGFpRRxZC4YcCOoD\nQ2ZB2HhwcdM6OqUGU8lCqVLpiblczvCgA0fx7HxnqfsUTYva3Lu5mha1OpiMcOpnS62m8ztA7w7d\nJlo6rFtWfh50pX5RyUKpUn+tOwTSTJebS++oLjYt6o3L8ffwr+YI65GcFPjzc0undUYMNAiCG2dD\nr/vBWz1xplSMShZKlTGbzJw6kkmjzAs0m/Bgie0ms4lndzzL+YzzfDD8A9r4tdEgynog/rClL+Kv\nr8FUACHXw4g3ocNI0Kt/8krlqHeOUmXO74smX3oQ3gZ0np4lti8+sJjf437n5f4vq2lRq5qxEKI2\nWPojYvaCqxf0/IflqabAzlpHp9QBKlkoVebYhmO4FhrpfN+NJbYVTYt6b+d7ubNj6X0ZSiVkXYID\nn8LBTyH7MjQMhVvehPB7wFPd4lOqjkoWSpXIySggLtWdNvIMXp1vLbbNflrUGREzNIqwDpESYvZZ\nOqwjvwOzEdrfbGlFtL0RdDqtI1TqIJUslCpx7Ov9SKEn7MbQYuvPZ5znmd/+v717D46rPO84/v1p\nvasLkizfML6g2CQupkowEHFJTDtcmkJpG+KUBNKbmZACk9BpSGcKCUkzBaYtyRTSDmkbMMzY0wzQ\nmJi6BMa42I6btjaWie82YAMxBt/AxlfZWklP/3jP2mtpV7sr6ezK1vOZ2dlz9rzn7LOvVu9zztlz\n3vcvmTpyKg/9xkM+LOpApNthw7Ohr6Zd66B6JFx2B1x6G4z5aKWjc2c4TxZuwMyMLav3MfLw+5x7\n08mRc08Mi1qV5NFrH6U+VbjnWZfDh9vDFU2vzoP2fTDugjBuxCe+CNVep648PFm4AXt3zTsctno+\n2bybqprQW2y6K83dy+5m15FdPHHdE0yqn1ThKE8zZvDWz8MQpa+/GF6b/rvhSGLKld4Nhys7TxZu\nwNY9+0sSnUk+/idXASeHRW3b3ebDopbq+KFwd/Urj8P7r0HdGJj5dWj9MjSdW+no3DDmycINyPEj\nHWzfU81Ee4v6C8K4FXM3zmXB1gXcceEdPixqsd7fCqseD/01HT8IEy6Cz/0LtHwekj62h6s8TxZu\nQDbNX0lXVYqWK5sBWLp9KQ+vfpjrplzHVy/yYVH71N0FbywO90ZsexmqktAyK1zVNLnVTzW5IcWT\nhRuQzSv2cFZ7B1O+OIst+7Zwz3/fQ8uYFh6c+SBV8ks4c2rfD7/8N1g1B/a/DQ0T4Or74JLZ0DC+\n0tE5l5MnC9dvezbuYL+NYsbE7ezrPsRdL99FY6rRh0XNZ9eGcBSx7t+hsx2aPxX6arrg98E7U3RD\nnCcL129rn3kFddfza7dcemJY1Hm/M49xdeMqHVrlpI+FI4f2fdHzfji8J9wf8av/gRG1cOEX4NI/\ngwkXVjpa54oWa7KQdD3wj0ACmGNmf99j+SNAZni0OuBsM2uKls0Gvh0te9DM5sYZqytN5/FO3tqZ\n4hx7h+99+BIbP9jID67+AdNHT690aIPjRKO/v3fjf3Rfj2VZr3e2595eUzN85gG4+I+hbnR5P4tz\ngyC2ZCEpAfwQ+AywA1glaaGZbcqUMbO7s8r/OXBxND0a+C7QChiwOlp3f1zxutJsmf+/pBN1HJ26\nk0VvL+Ibn/wG1zRfU+mweus8nqOBL6LhTx/Nv82qZGjwa0eFR1NzuHqptinMZy+rjaYbJ4YhS507\nTcV5ZHEZsNXM3gSQ9DRwI7ApT/kvERIEwHXAYjPbF627GLgeeCrGeF0JNv3iXaqPp/iHMc8w62Oz\nuLXl1njfMNPoF9Xwf3hyWaFGP9Oo142OGv0ZWQ19noY/dZZfqeRKZmaku4z2dBftHV25n9NdtHd0\nRvPdJ+fTXbR3dHMs3cXRzHy6+8Sy88c3Mmd2a6zxx5ksJgHvZM3vAC7PVVDSR4CpwJI+1u11C7Ck\n24HbAZqbmwcesSvKvtd3sLd7HOnEIi6a3Mp3rvhO8cOiZjf6Offssxv/7D39I/m3WTXiZENeOyrc\nvDbhwlMb/VwNvzf6Lku6q5ujHV0cy2q8s+ePprs4ltWo9yyb/dyzbGZZV7eVFJMEtckEtckENckE\ntakEdakw3VSbZOLIGmqTCc4bl3+s+8ESZ7LI9V+Yr6ZuAeabWVcp65rZY8BjAK2traX9FVy/rZq3\nDDiHDTO28sjHv0Vyx6oi9vqLbfSz9uBHTs5q9JtOTQjZjX+q3hv9M1y6K+xlH8tqxDPzR7Ma5WOZ\nZZmGvEfZUxr5zHT0emeJDTlEDXkqcepzMsHI2iQTGmuojRr22mRo5DPzdaneCSAzX5e1veoRVUNm\nfPo4k8UOILt/gsnAe3nK3gJ8rce6V/VYd9kgxnbC1rVtLHvktTg2fQY59Z8onRxD6vgWvnVwOU1z\nlvQq3UmCQ6rnkBo4qAYOqYFDGhemqxs42GtZPQfVQDu1odHvIDwO9BXTgejx1uB9TDckGFFy6DiZ\nANJdpTfkNcmqE413bepkY95QM4LxjdVZDfwIalNVWY11jvlkIryWmU6Ghryqamg05OUQZ7JYBUyT\nNBV4l5AQ/rBnIUnnA6OA/8t6eRHwt5JGRfO/DXwzjiBHVNci21XiWsPnC9KTAamO3WjSNlY2fY2l\niUaOVDVwJNHIkUQjR6saOFZVV/SevoDG6OFcRjJR1WtvPbvBr00mqEklqMu1Z59KUDMiMawa8nKI\nLVmYWaekuwgNfwJ40sw2SrofaDOzhVHRLwFPm5llrbtP0gOEhANwf+bH7sE2ZXoLt81tiWPTzjl3\nxlBWG31aa21ttba2tkqH4ZxzpxVJq82s4KVU3nmPc865gjxZOOecK8iThXPOuYI8WTjnnCvIk4Vz\nzrmCPFk455wryJOFc865gs6Y+ywk7QV+NYBNjAXeH6RwBpPHVRqPqzQeV2nOxLg+YmYFRyw7Y5LF\nQElqK+bGlHLzuErjcZXG4yrNcI7LT0M555wryJOFc865gjxZnPRYpQPIw+MqjcdVGo+rNMM2Lv/N\nwjnnXEF+ZOGcc66gYZssJH1f0hZJ6yQtkNSUp9z1kl6TtFXSvWWI6wuSNkrqlpT36gZJb0taL2mN\npNj7Zi8hrnLX12hJiyW9ET2PylOuK6qrNZIW5iozSPH0+fklVUt6Jlq+UtKUuGIpMa5bJe3NqqOv\nlCGmJyXtkbQhz3JJ+qco5nWSLok7piLjukrSgay6+usyxXWupKWSNkf/i3+Ro0x8dWZmw/JBGH1v\nRDT9EPBQjjIJYBtwHpAC1gK/HnNcFwDnE4aRbe2j3NvA2DLWV8G4KlRf3wPujabvzfV3jJYdLkMd\nFfz8wFeBf42mbwGeGSJx3Qo8Wq7vU/SevwlcAmzIs/wG4EXCgIpXACuHSFxXAc+Xs66i950AXBJN\nNwCv5/g7xlZnw/bIwsxeMrPOaHYFYZzvni4DtprZm2bWATwN3BhzXJvNbMgNCl5kXGWvr2j7c6Pp\nucDnYn6/vhTz+bPjnQ9cKxU5Bm28cZWdmS0H+hoB80ZgngUrgCZJE4ZAXBVhZjvN7NVo+hCwGZjU\no1hsdTZsk0UPXyZk454mAe9kze+g9x+nUgx4SdJqSbdXOphIJeprvJnthPDPBJydp1yNpDZJKyTF\nlVCK+fwnykQ7KweAMTHFU0pcAH8QnbqYL+ncmGMqxlD+//uUpLWSXpRU9nGZo9OXFwMreyyKrc5i\nG4N7KJD0X8A5ORbdZ2b/EZW5D+gEfpxrEzleG/DlY8XEVYSZZvaepLOBxZK2RHtElYyr7PVVwmaa\no/o6D1giab2ZbRtobD0U8/ljqaMCinnP/wSeMrPjku4kHP1cE3NchVSirorxKqGLjMOSbgCeA6aV\n680l1QPPAl83s4M9F+dYZVDq7IxOFmb2W30tlzQb+D3gWotO+PWwA8jew5oMvBd3XEVu473oeY+k\nBYRTDQNKFoMQV9nrS9JuSRPMbGd0uL0nzzYy9fWmpGWEvbLBThbFfP5MmR2SRgAjif+UR8G4zOyD\nrNnHCb/jVVos36eBym6gzewFSf8saayZxd5nlKQkIVH82Mx+mqNIbHU2bE9DSboeuAf4rJkdzVNs\nFTBN0lRJKcIPkrFdSVMsSWdJashME36sz3nlRplVor4WArOj6dlAryMgSaMkVUfTY4GZwKYYYinm\n82fHexOwJM+OSlnj6nFe+7OE8+GVthD40+gKnyuAA5lTjpUk6ZzM70ySLiO0ox/0vdagvK+AJ4DN\nZvZwnmLx1Vm5f9EfKg9gK+Hc3prokblCZSLwQla5GwhXHWwjnI6JO65ZhL2D48BuYFHPuAhXtayN\nHhuHSlwVqq8xwMvAG9Hz6Oj1VmBONP1pYH1UX+uB22KMp9fnB+4n7JQA1AA/ib5/rwDnxV1HRcb1\nd9F3aS2wFJhehpieAnYC6ei7dRtwJ3BntFzAD6OY19PH1YFljuuurLpaAXy6THFdSTiltC6r3bqh\nXHXmd3A755wraNiehnLOOVc8TxbOOecK8mThnHOuIE8WzjnnCvJk4ZxzriBPFs6VQNLhAa4/P7qL\nHEn1kn4kaVvUi+hySZdLSkXTZ/RNs+704snCuTKJ+hBKmNmb0UtzCHdvTzOzFkLPr2MtdPb3MnBz\nRQJ1LgdPFs71Q3SH7PclbVAYV+Tm6PWqqPuHjZKel/SCpJui1f6I6A5zSR8FLge+bWbdELoiMbOf\nRWWfi8o7NyT4Ya5z/fN54CJgBjAWWCVpOaErkSnAJwg94G4GnozWmUm4OxigBVhjZl15tr8BuDSW\nyJ3rBz+ycK5/riT00tplZruBnxMa9yuBn5hZt5ntInSdkTEB2FvMxqMk0pHpA8y5SvNk4Vz/5Buw\nqK+BjNoJfUNB6FtohqS+/gergWP9iM25QefJwrn+WQ7cLCkhaRxhKM5XgF8QBhGqkjSeMARnxmbg\nYwAWxtJoA/4mqwfTaZJujKbHAHvNLF2uD+RcXzxZONc/Cwi9f64FlgB/FZ12epbQU+kG4EeEkcwO\nROv8jFOTx1cIgzptlbSeMI5EZuyBq4EX4v0IzhXPe511bpBJqrcwitoYwtHGTDPbJamW8BvGzD5+\n2M5s46fAN20Ijsfuhie/Gsq5wfe8pCYgBTwQHXFgZu2SvksYE3l7vpWjAYqe80ThhhI/snDOOVeQ\n/2bhnHOuIE8WzjnnCvJk4ZxzriBPFs455wryZOGcc64gTxbOOecK+n8WDHGaCJ7IoAAAAABJRU5E\nrkJggg==\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0xc4b5b70>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "accuracy_s1 =np.array(accuracy_s).reshape(len(C_s),len(gamma_s))\n",
    "x_axis = np.log10(C_s)\n",
    "for j, gamma in enumerate(gamma_s):\n",
    "    pyplot.plot(x_axis, np.array(accuracy_s1[:,j]), label = ' Test - log(gamma)' + str(np.log10(gamma)))\n",
    "\n",
    "pyplot.legend()\n",
    "pyplot.xlabel( 'log(C)' )                                                                                                      \n",
    "pyplot.ylabel( 'accuracy' )\n",
    "pyplot.savefig('RBF_SVM_Otto.png' )\n",
    "\n",
    "pyplot.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "这个结果貌似有点奇怪。过拟合了？小于-1的部分不应该要?一整晚上才跑完，没时间调了。。。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 2",
   "language": "python",
   "name": "python2"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 2
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython2",
   "version": "2.7.14"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
